课程主页:https://see.stanford.edu/Course/EE263

这次回顾EE263作业2。

3.2

(a)令

如果$p,\tilde p$无法识别,那么

即$p-\tilde p \in \mathcal N(A)$。

(b)题目的含义是问,是否存在非负系数$a_1,a_2,a_3​$,使得

显然,这和$A\left[ \begin{array}{lll}{u} & {v} & {w}\end{array}\right]$有关,所以不一定成立。

(c)利用(b)求解即可:

%(c)
A = [L_coefficients; M_coefficients; S_coefficients];
b = A * test_light;
B = A * [ R_phosphor; G_phosphor; B_phosphor;]';
coef = B \b;
coef
coef =
    0.4226
    0.0987
    0.5286

(d)Beth正确。令$r_i, \tilde r_i$为两个物体的反射率,$p$为光谱,如果

那么

这说明要使得等式成立,必然有$p\in \mathcal N(A(R-\tilde R))$,所以如果$p\notin \mathcal N(A(R-\tilde R))$,那么该关系并不能成立。

3.3

所以

3.10

(a)因为二次函数大于等于$0$恒成立,所以

等号成立当且仅当

此时存在$\lambda $,使得

(b)

(c)化简$(v+\lambda w)^{T}(v+\lambda w)​$可得

对该式应用(a)(b)得到

(d)由(a)可知,此时存在$\lambda $使得

所以存在$\lambda ​$使得

所以当$v,w$平行时,等号成立。

3.11

(a)$\mathcal R(G)$表示所有可能的$y$。

(b)$\mathcal N(H)$表示使得解码结果为$0$的编码,特别的,如果$v\in \mathcal N(H)$,那么

(c)题目的要求是,找到$H$,使得

  • 存在$G$,使得$HG=I_3$
  • $He_i = 0, i=1,2,3$(一位非$0$的向量输出为$0$)

由第二个条件可得$H$每一列都是$0$,所以$H$所有元素全为$0$,这就与第一个条件矛盾,因此无法构造。

3.16

由定义可得

那么线性方程组为

要使得上述方程对任意$\rho $有唯一解,那么$P$列满秩即可,即

3.17

(a)错误,例如

(b)错误,例如

(c)正确,因为$A,B$为onto,所以存在$A_1,B_1$,使得

那么

(d)错误,例如

(e)正确,因为$\left[ \begin{array}{l}{A} \\ {B}\end{array}\right]$为onto,所以该矩阵的行向量线性无关,因此$A$的行向量线性无关,$B$的行向量无关,即$A,B$都是onto

(f)正确,记

如果

那么

因此

由条件可知$A$列向量线性无关,所以

因此列向量线性无关,即列满秩,因此结论成立。

补充题

1

由仿射函数的定义可得,存在$A\in \mathbb R^{2\times 3},b\in \mathbb R^2$,使得

现在的条件为

我们的目标是解出$A,b$,现在将后面三个式子减去第一个式子得到

因此上述方程可以合并为

如果$\tilde P$可逆,那么

求解出$A$之后,带入任意一个式子即可得到$b$:

这部分代码如下:

import numpy as np

#数据
P_1 = np.array([10, 10, 10])
P_2 = np.array([100, 10, 10])
P_3 = np.array([10, 100, 10])
P_4 = np.array([10, 10, 100])
T_1 = np.array([27, 29])
T_2 = np.array([45, 37])
T_3 = np.array([41, 49])
T_4 = np.array([35, 55])

#计算
P = np.c_[P_2-P_1, P_3-P_1, P_4-P_1]
T = np.c_[T_2-T_1, T_3-T_1, T_4-T_1]
A = T.dot(np.linalg.inv(P))
b = T_1 - A.dot(P_1)

print("A =", A)
print("b =", b)
A = [[0.2        0.15555556 0.08888889]
 [0.08888889 0.22222222 0.28888889]]
b = [22.55555556 23.        ]

现在假设

那么

要使得

那么

求解该线性方程组即可,注意该问题中$a_{ij}>0$,所以

这部分代码如下:

T0 = 70
tmp = (T0 - b) / np.sum(A, axis=1)
pmin = np.min(tmp)
print("p_min =", pmin)
p_min = 78.33333333333333

2

由条件可得

由条件可得

所以只要计算$t=\frac{| a|}{| b|}​$的范围即可。

由条件可得

求解该方程即可,对应代码如下:

import numpy as np

eta_ab = 0.1
a1 = 1 - eta_ab ** 2
b1 = 2
c1 = 1
b2 = -2

def solve(a, b, c):
    delta = b ** 2 - 4 * a * c
    x1 = (-b - np.sqrt(delta)) / (2 * a)
    x2 = (-b + np.sqrt(delta)) / (2 * a)
    
    return x1, x2

t1, t2 = solve(a1, b1, c1)
t3, t4 = solve(a1, b2, c1)
print(t1, t2)
print(t3, t4)

tmin = t3
tmax = t4
eta_bamin = eta_ab * tmin
eta_bamax = eta_ab * tmax
print("eta_ba的最小值为{}".format(eta_bamin))
print("eta_ba的最大值为{}".format(eta_bamax))
-1.1111111111111112 -0.9090909090909091
0.9090909090909091 1.1111111111111112
eta_ba的最小值为0.09090909090909091
eta_ba的最大值为0.11111111111111112

接着求解$\theta = \angle (a,b)$的范围,依然利用定义:

所以

因为

所以$\cos(\theta)>0$,即

求解得到:

#求角度
theta_min = 0
theta_max = np.arccos(np.sqrt(1-eta_ab**2))
print("theta的最小值为{}".format(theta_min))
print("theta的最大值为{}".format(theta_max))
theta的最小值为0
theta的最大值为0.10016742116155969

3

利用matlab如下命令即可:

rank([F g])==rank(F)

依次删除某行的数据,记删除后的矩阵为$A_1, y_1$,之后判断$[A_1, y_1]$的秩是否和$A_1$的秩相等即可,如果相等,则出错的位置为删除的行:

n =  length(ytilde);
flag = 0;
for i = 1:n
    index = [1:(i-1) (i+1):n];
    A1 = A(index, :);
    y1 = ytilde(index);
    res = (rank([A1 y1])==rank(A1));
    if res == 1
        flag = i;
        break;
    end
end

fprintf("第%d个传感器出错\n", flag);
第11个传感器出错